Terraform variable, module를 이용하여 VPC 생성해 보기
안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 Terraform variable, module를 이용하여 VPC를 생성해 보는 방법 대해서 정리해 봤습니다.
디렉토리 구성
$ tree ├── provider.tf ├── main_vpc.tf └── module └── vpc_folder ├── vpc.tf └── variables.tf
먼저 디렉토리 구성은 다음과 같습니다.
module->vpc_folder 폴더 내에 vpc 변수를 정의하는 파일을 생성하고, main_vpc.tf 파일에서 module을 통해 vpc를 생성합니다.
variable, module를 이용해 VPC 생성
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.0"
}
}
}
provider "aws" {
region = "ap-northeast-1"
}
먼저 provider.tf 에서는 버전과 리전을 정의 합니다.
module "network" {
source = "./module/vpc"
cidr_vpc = "10.0.0.0/16"
cidr_public1 = "10.0.1.0/24"
cidr_public2 = "10.0.2.0/24"
cidr_private1 = "10.0.11.0/24"
cidr_private2 = "10.0.12.0/24"
az1 = "ap-northeast-1a"
az2 = "ap-northeast-1c"
}
이어서 main_vpc.tf 입니다.
이 소스코드에서 module을 정의 합니다.
source의 경우 불러올 module의 경로를 의미합니다.
variable "cidr_vpc" {}
variable "cidr_public1" {}
variable "cidr_public2" {}
variable "cidr_private1" {}
variable "cidr_private2" {}
variable "az1" {}
variable "az2" {}
variables.tf 에서는 각각의 변수 값들을 정의합니다.
resource "aws_vpc" "vpc" {
cidr_block = var.cidr_vpc
instance_tenancy = "default"
enable_dns_hostnames = true
}
resource "aws_subnet" "public1" {
vpc_id = aws_vpc.vpc.id
cidr_block = var.cidr_public1
availability_zone = var.az1
}
resource "aws_subnet" "public2" {
vpc_id = aws_vpc.vpc.id
cidr_block = var.cidr_public2
availability_zone = var.az2
}
resource "aws_subnet" "private1" {
vpc_id = aws_vpc.vpc.id
cidr_block = var.cidr_private1
availability_zone = var.az1
}
resource "aws_subnet" "private2" {
vpc_id = aws_vpc.vpc.id
cidr_block = var.cidr_private2
availability_zone = var.az2
}
vpc.tf 에서는 variables.tf 에서 정의한 변수 이름을 바탕으로 리소스를 생성합니다.
variable을 사용할 때는 var 를 이용해서 사용합니다.
- terraform init
- terraform plan
- terraform apply
이제 다음 명령어로 리소스를 생성합니다.
# module.network.aws_vpc.vpc will be created
+ resource "aws_vpc" "vpc" {
+ arn = (known after apply)
+ cidr_block = "10.0.0.0/16"
+ default_network_acl_id = (known after apply)
+ default_route_table_id = (known after apply)
+ default_security_group_id = (known after apply)
+ dhcp_options_id = (known after apply)
+ enable_classiclink = (known after apply)
+ enable_classiclink_dns_support = (known after apply)
+ enable_dns_hostnames = true
+ enable_dns_support = true
+ id = (known after apply)
+ instance_tenancy = "default"
+ ipv6_association_id = (known after apply)
+ ipv6_cidr_block = (known after apply)
+ ipv6_cidr_block_network_border_group = (known after apply)
+ main_route_table_id = (known after apply)
+ owner_id = (known after apply)
+ tags_all = (known after apply)
}
Plan: 5 to add, 0 to change, 0 to destroy.
커맨드 라인에서는 문제없이 리소스가 생성된 것을 확인할 수 있습니다.
Consol에 들어가서 확인해 보면 문제 없이 생성된 것을 확인할 수 있습니다.
본 블로그 게시글을 읽고 궁금한 사항이 있으신 분들은 [email protected]로 보내주시면 감사하겠습니다.